package edu.cqie.diy;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

/**
 * AnnotationPointCut
 *
 * @description:注解开发，实现aop
 * @Author XiaoZhou
 * @Date 2023/10/17 22:00
 */
@Aspect
public class AnnotationPointCut {
    @Before("execution(* edu.cqie.service.UserServiceImpl.*(..))")
    public void before() {
        System.out.println("=========方法执行前===========");
    }

    @After("execution(* edu.cqie.service.UserServiceImpl.*(..))")
    public void after() {
        System.out.println("=========方法执行后===========");
    }

    //在环绕增强中，我们可以给定一个参数，代表我们要获取处理切入的点
    @Around("execution(* edu.cqie.service.UserServiceImpl.*(..))")
    public void around(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("环绕前");
        long start = System.currentTimeMillis();
        //执行方法
        Object proceed = jp.proceed();
        long end = System.currentTimeMillis();
        long time =end-start;
        System.out.println("环绕后");
        System.out.println("方法执行了："+time+"ms");

    }
}
